# -*- coding: iso-8859-1 -*-
# file Object.py
# author Rocco Martino
#
############################################################################
#    Copyright (C) 2015 by Rocco Martino                                   #
#    martinorocco@gmail.com                                                #
#                                                                          #
#    This program is free software; you can redistribute it and/or modify  #
#    it under the terms of the GNU Lesser General Public License as        #
#    published by the Free Software Foundation; either version 2.1 of the  #
#    License, or (at your option) any later version.                       #
#                                                                          #
#    This program is distributed in the hope that it will be useful,       #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#    GNU Lesser General Public License for more details.                   #
#                                                                          #
#    You should have received a copy of the GNU Lesser General Public      #
#    License along with this program; if not, write to the                 #
#    Free Software Foundation, Inc.,                                       #
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
############################################################################

############################################################################
from . import Writable
############################################################################




############################################################################
# ........................................................................ #
# ........................................................................ #
############################################################################




############################################################################
# ........................................................................ #
class Object(Writable.Writable):





############################################################################
    ClassName = None
    Name = None

    UserValues = []

    CollectProps = True

    CheckUniqueID = True

    UseObjectName = True
############################################################################









############################################################################
    def __init__(self, obj, data):
        super(Object, self).__init__(obj, data)

        self.ClassName = "osg::Object"
        self.Name = "NoName"
        self.UserValues = []
        self.CollectProps = True
        self.CheckUniqueID = True
        self.UseObjectName = True
############################################################################




############################################################################
    def writeObject(self, writer):



        obj = self.BlenderObject

        if obj:

            if self.UseObjectName:
                self.Name = obj.name

            if self.CollectProps:
                for prop in obj.keys():
                    if prop != "_RNA_UI"  and  prop[:6] != "cycles":
                        self.addUserValue(prop, obj[prop])




        writer.moveIn(self.ClassName)



        if self.BlenderObject and self.CheckUniqueID:
            obj_info = self.Data.Objects[ self.BlenderObject ]

            writer.writeLine("UniqueID %d" % obj_info[1])


            if not obj_info[0]:

                self.writeData( writer )

                self.Data.Objects[ self.BlenderObject ] = [ True, obj_info[1] ]

        else:

            writer.writeLine("UniqueID %d" % self.Data.UniqueID.generate())

            self.writeData( writer )



        writer.moveOut(self.ClassName)
############################################################################




############################################################################
    def writeData(self, writer):

        if self.Name != "":
            writer.writeLine("Name \"%s\"" % self.Name)




        if self.UserValues != [] :
            writer.moveIn( "UserDataContainer TRUE" )
            writer.moveIn( "osg::DefaultUserDataContainer" )



            writer.writeLine( "UniqueID %d" % self.Data.UniqueID.generate() )

            writer.moveIn( "UDC_UserObjects %d" %len(self.UserValues) )


            for i in self.UserValues:
                writer.moveIn( "osg::%sValueObject" %i[2] ) ;

                writer.writeLine( "UniqueID %d" % self.Data.UniqueID.generate() ) ;

                writer.writeLine( "Name \"%s\"" % str(i[0]) ) ;


                if i[2] == "String":
                    writer.writeLine( "Value \"%s\"" % str(i[1]) ) ;
                else:
                    writer.writeLine( "Value %s" % str(i[1]) ) ;

                writer.moveOut( "osg::%sValueObject" %i[2] ) ;


            writer.moveOut( "UDC_UserObjects %d" %len(self.UserValues) )



            writer.moveOut( "osg::DefaultUserDataContainer" )
            writer.moveOut( "UserDataContainer TRUE" )
############################################################################




############################################################################
    def addUserValue(self, pName, pValue):

        pType = ""

        if type(pValue) == str:
            pType = "String"

        elif type(pValue) == bool:
            pValue = str(pValue).upper()
            pType = "Bool"

        elif type(pValue) == int:
            pType = "Int"

        elif type(pValue) == float:
            pType = "Float"




        if type(pValue) == bool:
            if pValue:
                pValue = "TRUE"
            else:
                pValue = "FALSE"


        if pType != "":
            self.UserValues.append( ( str(pName), str(pValue), pType ) )
        else:
            print("OOE [" + self.BlenderObject.name + "] Object.addUserValue: unsupported type")
############################################################################




############################################################################
    def getUserValue(self, pName):

        for val in self.UserValues:
            if val[0] == pName:
                return val

        return None
############################################################################




# ........................................................................ #
############################################################################
